「メール受信をトリガーにしてジョブフローを実行する」では、Kompira Enterprise でメールを利用する方法をご説明しました。
本稿では Kompira Enterprise の「チャネル」を用いて、外部システムから Kompira Enterprise に情報を送信する方法をご紹介します。
「メールチャネル」では外部のメールサーバーに対してポーリングをかけ、メールサーバーからメールを受信する動作をしますが、「チャネル」は外部からデータが送られてくるのを待機するという動きになります。「チャネル」にデータを送るのは専用のツール「kompira_sendevt」を用います。
動作確認環境
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.5.5.post11 |
OS | CentOS 7.8.2003
Windows 10 21H1 |
Python | 2.7.18 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.2.post4 |
OS | CentOS 7.8.2003
Windows 10 21H1 |
Python | 3.6.8 |
Linux への kompira_sendevt インストール
まずはデータを送信するためのツールを用意します。次のようなコマンドで必要なモジュールをインストールします。
$ wget https://bitbucket.org/kompira/package/downloads/kompira-<version>-bin.tar.gz $ tar zxvf kompira-<version>-bin.tar.gz $ cd kompira-<version>-bin $ sudo ./install.sh --sendevt <Kompira Enterprise サーバー名>
<version> は Kompira Enterprise のバージョン (例えば1.6.2.post4) を、
<Kompira Enterprise サーバー名> は Kompira Enterprise サーバーのホスト名、または IP アドレスを指定します。
※ 通知先の Kompira Enterprise と同一バージョンのパッケージを使ってインストールすることを推奨します
以上で、イベント送信パッケージのインストールは完了です。/opt/kompira/bin 以下に kompira_sendevt コマンドが配置されます。
以下のようにターミナル上で kompira_sendevt コマンドを実行してバージョン番号が表示されることを確認してください。
$ /opt/kompira/bin/kompira_sendevt --version
必要に応じてパスを通す設定を行ってください。
Windows への kompira_sendevt インストール
Windows では動作のために Python の動作環境が必要となります。
Python のインストール
以下の公式ダウンロードサイトから、通知先の Kompira Enterprise のバージョンに対応した Python をウンロードして、 Windows にインストールしてください。
https://www.python.org/downloads/windows
Kompira Enterprise 1.6 系の場合は Python 3.6 系、Kompira Enterprise 1.5 系の場合は Python 2.7系 になります。
※ 指定したバージョン以外の Python では正常に作動しない可能性があります。
インストールが完了したら、コマンドラインから Python が起動できるように、環境変数のパスを追加してください。
kompira_sendevt パッケージのインストール
Kompira Enterprise パッケージを Windows 上にダウンロードして展開し、展開したディレクトリの /kompira-<version>-bin/dist/ に移動してから、以下のコマンドを実行します。
$ pip install Kompira_sendevt-<version>-py3-none-any.whl
※ <version> は Kompira Enterprise のバージョンに合わせて適宜置き換えてください。
※ Kompira Enterprise 1.5 系の場合は Kompira_sendevt-<version>-py2-none-any.whl になります。
以上で、イベント送信パッケージのインストールは完了です。以下のように Windows のコマンドコンソールで kompira_sendevt コマンドを実行してバージョン番号が表示されることを確認してください。
$ kompira_sendevt --version
ジョブフローでチャネルを扱う
ここまででデータの送信側の設定を行ってきましたが、今度は受信側のジョブフローを実装していきます。ここでは Kompira Enterprise のデフォルトのチャネル /system/channels/Alert を利用して、下記のようなジョブフローを実行します。
</system/channels/Alert> -> # データの受信待機 [message = $RESULT] -> # データを受信したら内容は $RESULT に格納される print('${message} を受信しました') -> self() # 再度、受信待機に戻る
上記のジョブフローを実行しますと、実行画面の右側の「プロセス情報」のステータスは「待ち」状態になり、コンソールには実行中の表示と、データを受信した際には受信したメッセージが表示されます。停止させる際には「停止」ボタンを利用してください。
次に kompira_sendevt コマンドをインストールしたサーバーからデータを送信します。次のようなコマンドを実行してみてください。
$ /opt/kompira/bin/kompira_sendevt -s <Kompira Enterprise サーバー名> key=msg
※ Windows 環境の場合は /opt/kompira/bin/kompira_sendevt を kompira_sendevt に置き換えてください
数秒後に Kompira Enterprise のコンソールには以下のような表示が現れます。
{'key': 'msg'} を受信しました
上記のように「key=msg」というデータを送信すると、{ } でくくられた key-value 関係の辞書型のデータとして格納されます。また、この値は複数を送ることが出来ます。
次にデータをコマンドラインのパイプを使って送り込んでみます。
$ cd /opt/kompira/bin $ pwd | ./kompira_sendevt -s <Kompira Enterprise サーバー名>
するとコンソールの表示は以下のようになります。
b'/opt/kompira/bin\n'を受信しました
このように、パイプで送られたデータの場合には辞書型ではなく、バイナリ型のリテラルとして受信します。
※ Kompira Enterprise 1.5 系以前では文字列として受信します。
「処理のトリガーとなるようなメッセージを送信する場合にはコマンドラインから送信する」「コマンドの出力結果などを送る場合にはパイプを利用する」といった使い分けをしてみてください。
チャネルで受信したデータにより、ジョブフローを起動するには、例えば下記のようにジョブフローを修正します。
</system/channels/Alert> -> # データの受信待機 [message = $RESULT] -> # データを受信したら内容は $RESULT に格納される print('${message} を受信しました') -> { if message.title == "DOWN" | [./プロセス再起動: message.server] } -> self() # 再度、受信待機に戻る
上記のジョブフロー起動後、
$ /opt/kompira/bin/kompira_sendevt -s <Kompira Enterprise サーバー名> title=DOWN server=server1
というようにデータを送信すると、[./プロセス再起動] というジョブフローが実行されることになります。ここでは [./プロセス再起動] が、再起動の対象となるサーバー名を引数にとることを想定しています。
独自のチャネルを作成する
ここまでは Kompira Enterprise のデフォルトで用意されたチャネル「Alert」を利用してきましたが、これだけでは様々な機器や条件で受信したデータを振り分ける際に不便です。
そのため、独自のチャネルを用意する方法をご紹介します。
方法は非常に簡単で、ジョブフローを作成するのと同様に、名前を指定し、型を「チャネル」にしてオブジェクトを作成するだけです。
このチャネルを利用して先のジョブフローを書き換えると以下のようになります。
<./テストチャネル> -> # データの受信待機 [message = $RESULT] -> # データを受信したら内容は $RESULT に格納される print('${message} を受信しました') -> { if message.title == "DOWN" | [./プロセス再起動: message.server] } -> self() # 再度、受信待機に戻る
このジョブフローはデフォルトの Alert チャネルを用いた場合と機能的には差がありません。ただし、データを送る側では明示的にチャネルを指定する必要があります。
例えば /root/receive_inbound_data にテストチャネルを作成した場合は以下のように指定します。
$ /opt/kompira/bin/kompira_sendevt -s <Kompira Enterprise サーバー名> --channel=/root/receive_inbound_data/テストチャネル title=DOWN server=server1
同一のチャネルを複数のジョブフローから利用することも可能ですが、その際には最初に処理したジョブフローだけがメッセージを処理することになります。
このためジョブフローの用途に応じて、送信側のサーバーごと、または発生させるイベント種別ごとにチャネルを作成すると、受信データの扱いが楽になり思わぬ事故を防ぐことができます。
チャネル自体は、それを利用するジョブフローの有無や、ジョブフローが動作中 / 停止中などの状態に関係なくデータを受信します。また受信したデータは内部的にはメッセージキューに格納され、受信順に FIFO (First-in-First-out) で処理されます。
このように外部のサーバーから Kompira Enterprise にデータを送る手段をご用意してありますので、運用ツールと連携させたり、スクリプトから呼び出して、Kompira Enterprise 上のジョブフローを制御してみてください。